Итак, мы сделаем два приложения. Первое это ActiveX EXE в котором реализуем нашу поддержку VBA, а второе приложение клиент. Я убрал форму в ActiveX и изменил модуль инициализации.
Public vbas As Apc Public myapp As MyAppication Sub Main() Set myapp = New MyAppication Set vbas = New Apc End Sub
А в класс приложения добавил свойство hWndHost, и соответственно разделил инициализацию класса и показ среды.
'local variable(s) to hold property value(s)
Private mvarhWndHost As Long 'local copy
Public Property Let hWndHost(ByVal vData As Long)
'used when assigning a value to the property, on the left side of an assignment.
'Syntax: X.hWndHost = 5
mvarhWndHost = vData
End Property
Public Property Get hWndHost() As Long
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.hWndHost
hWndHost = mvarhWndHost
End Property
Public Sub Show()
vbas.Ide.Visible = True
End Sub
Public Sub Init()
vbas.LicenseKey = "16175148714896599659AFABD8ED3C2A416B45E4CD6F5484BD8CE1"
vbas.ApplicationObject = myapp
vbas.hWnd = mvarhWndHost
End Sub
Создал приложение клиент.

В момент загрузки формы инициализирую класс, а в момент выбора меню показываю VBA среду.
Private Sub Form_Load()
Set pr = New MyProject.MyAppication
pr.hWndHost = Me.hWnd
pr.Init
End Sub
Private Sub VBA_Click()
pr.Show
End Sub
В результате все показывается и переключается. Это уже хорошо.